/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.upn.sigemfi.vfi.beans;

import edu.upn.sigemfi.ope.be.Moneda;
import edu.upn.sigemfi.ope.be.Ventanilla;
import edu.upn.sigemfi.vfi.bc.SaldoCajaDelegate;
import edu.upn.sigemfi.vfi.bc.TransferenciaDelegate;
import edu.upn.sigemfi.vfi.be.SaldoCaja;
import edu.upn.sigemfi.vfi.be.Transferencia;
import java.util.Date;

import java.util.List;
import javax.faces.model.SelectItem;

/**
 *
 * @author Programador
 */
public class TransferenciaController extends AbstractController {

    private TransferenciaDelegate delegado;
    private Transferencia transferencia;
    private Moneda monedaSeleccionada;
    public Ventanilla ventanillaSeleccionada;
    private SaldoCaja saldoCaja;
    private SaldoCaja cajaSeleccionada;
    private SaldoCajaDelegate delegadoSaldoCaja;

    public TransferenciaController() {
        delegado = new TransferenciaDelegate();
        delegadoSaldoCaja = new SaldoCajaDelegate();
    }

    public List<Transferencia> getTransferenciaes() {
        try {
            return delegado.listar();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public SelectItem[] getMonedas() {
        SelectItem[] select = null;
        try {

            List<SaldoCaja> lista = delegadoSaldoCaja.listar();
            if (lista != null) {
                select = new SelectItem[lista.size()];
                int i = 0;
                // select[i++] = new SelectItem(null, "<<Seleccione una Moneda");
                for (SaldoCaja m : lista) {
                    //select[i++] = new SelectItem(m.getFidOpeMoneda(), m.getFidOpeMoneda().getDescripcion());
                    select[i++] = new SelectItem(m, m.getFidOpeMoneda().getDescripcion());
                }
            } else {
                select = new SelectItem[1];
                select[0] = new SelectItem(null, "No existen monedas");
            }
        } catch (Exception e) {

            select = new SelectItem[1];
            select[0] = new SelectItem(null, "<<Hubo un error>>" + e.getMessage());
        }
        return select;
    }

    public String nuevo() {
        transferencia = new Transferencia();
        saldoCaja = new SaldoCaja();
        ventanillaSeleccionada = new Ventanilla();
        return "nuevo";
    }

    public String registrar() {

        try {
            TransaccionController tipotransaccion = (TransaccionController) getBean("TransaccionController");

            UsuarioVentanillaController uv = (UsuarioVentanillaController) getBean("UsuarioVentanillaController");

            if (tipotransaccion.getTipoOperacion().equals("transferencia")) {

                if (Double.parseDouble(transferencia.getMonto().toString()) > cajaSeleccionada.getMonto()) {
                    error("No ahi sufiiente dinero en la Caja");
                    return null;
                }

                operacionTransferencia(uv);

            } else {

                if (tipotransaccion.getTipoOperacion().equals("recepcion")) {

                    operacionRecepcion(uv);

                }

            }


        //    transferencia.setFidOpeVentanilla(ventanillaSeleccionada);
        //   saldoCaja.setFidOpeMoneda(transferencia.getFidOpeMoneda());
        //     saldoCaja.setFidVfiCaja(delegadoSaldoCaja.buscar(Long.parseLong("1")).getFidVfiCaja());

        } catch (Exception e) {
            e.printStackTrace();
        }
        return "volver";
    }

    public void operacionTransferencia(UsuarioVentanillaController uv) {
        try {
            transferencia.setFidOpeMoneda(cajaSeleccionada.getFidOpeMoneda());
            saldoCaja.setMonto(cajaSeleccionada.getMonto() - Double.parseDouble(transferencia.getMonto().toString()));
            saldoCaja.setFidOpeMoneda(cajaSeleccionada.getFidOpeMoneda());
            saldoCaja.setFidVfiCaja(cajaSeleccionada.getFidVfiCaja());
            saldoCaja.setIdSaldoCaja(cajaSeleccionada.getIdSaldoCaja());
            //ventanillaSeleccionada.setIdVentanilla(uv.getUsuarioVentanilla().getFidOpeVentanilla().getIdVentanilla());
            transferencia.setFidOpeVentanilla(uv.getUsuarioVentanilla().getFidOpeVentanilla());

            //FECHA
            Date date1 = new Date();
            java.sql.Date date2 = new java.sql.Date(date1.getTime());

            transferencia.setFecha(date1);
            transferencia.setEstado(false);


            delegadoSaldoCaja.editar(saldoCaja);
            delegado.crear(transferencia);



               info("Transferencia Exitosa");

        //    transferencia.setFidOpeVentanilla(ventanillaSeleccionada);
        //   saldoCaja.setFidOpeMoneda(transferencia.getFidOpeMoneda());
        //     saldoCaja.setFidVfiCaja(delegadoSaldoCaja.buscar(Long.parseLong("1")).getFidVfiCaja());

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public void operacionRecepcion(UsuarioVentanillaController uv) {
        try {
            transferencia.setFidOpeMoneda(cajaSeleccionada.getFidOpeMoneda());
            saldoCaja.setMonto(cajaSeleccionada.getMonto() + Double.parseDouble(transferencia.getMonto().toString()));
            saldoCaja.setFidOpeMoneda(cajaSeleccionada.getFidOpeMoneda());
            saldoCaja.setFidVfiCaja(cajaSeleccionada.getFidVfiCaja());
            saldoCaja.setIdSaldoCaja(cajaSeleccionada.getIdSaldoCaja());
            //ventanillaSeleccionada.setIdVentanilla(uv.getUsuarioVentanilla().getFidOpeVentanilla().getIdVentanilla());
            transferencia.setFidOpeVentanilla(uv.getUsuarioVentanilla().getFidOpeVentanilla());

            //FECHA
            Date date1 = new Date();
            java.sql.Date date2 = new java.sql.Date(date1.getTime());

            transferencia.setFecha(date1);
            transferencia.setEstado(false);


            delegadoSaldoCaja.editar(saldoCaja);
            delegado.crear(transferencia);
            info("Recepcion exitosa");





        //    transferencia.setFidOpeVentanilla(ventanillaSeleccionada);
        //   saldoCaja.setFidOpeMoneda(transferencia.getFidOpeMoneda());
        //     saldoCaja.setFidVfiCaja(delegadoSaldoCaja.buscar(Long.parseLong("1")).getFidVfiCaja());

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public Transferencia getTransferencia() {
        return transferencia;
    }

    public void setTransferencia(Transferencia transferencia) {
        this.transferencia = transferencia;
    }

    /**
     * @return the monedaSeleccionada
     */
    public Moneda getMonedaSeleccionada() {
        return monedaSeleccionada;
    }

    /**
     * @param monedaSeleccionada the monedaSeleccionada to set
     */
    public void setMonedaSeleccionada(Moneda monedaSeleccionada) {
        this.monedaSeleccionada = monedaSeleccionada;
    }

    /**
     * @return the ventanillaSeleccionada
     */
    public Ventanilla getVentanillaSeleccionada() {
        return ventanillaSeleccionada;
    }

    /**
     * @param ventanillaSeleccionada the ventanillaSeleccionada to set
     */
    public void setVentanillaSeleccionada(Ventanilla ventanillaSeleccionada) {
        this.ventanillaSeleccionada = ventanillaSeleccionada;
    }

    /**
     * @return the saldoCaja
     */
    public SaldoCaja getSaldoCaja() {
        return saldoCaja;
    }

    /**
     * @param saldoCaja the saldoCaja to set
     */
    public void setSaldoCaja(SaldoCaja saldoCaja) {
        this.saldoCaja = saldoCaja;
    }

    /**
     * @return the cajaSeleccionada
     */
    public SaldoCaja getCajaSeleccionada() {
        return cajaSeleccionada;
    }

    /**
     * @param cajaSeleccionada the cajaSeleccionada to set
     */
    public void setCajaSeleccionada(SaldoCaja cajaSeleccionada) {
        this.cajaSeleccionada = cajaSeleccionada;
    }
}
